<?php

class Checklist_model extends CI_Model{
    
   public function __construct() {
       parent::__construct();
   }
   
   function lista_sucursales() {
        $query = 'select s_sucursal_id,s_nombre from sucursal order by s_nombre asc';
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }
       
    function crear_cuestionario($d_fecha_evaluacion,$d_jefe_cocina,$d_gerente,$s_sucursal_id){
        
        $cuestionario = array(
            'd_fecha' => $d_fecha_evaluacion,
            'd_jefe_cocina' => $d_jefe_cocina,
            'd_gerente' => $d_gerente,
            's_sucursal_id' => $s_sucursal_id
        );
        $insert_query = "insert into dh "
                . "(d_dh_id,d_fecha,d_jefe_cocina,d_gerente,s_sucursal_id) values "
                . "(NULL,?,?,?,?)";
        $this->db->query($insert_query, $cuestionario);
        $query = "select max(d_dh_id) as id from dh";
        $resultado = $this->db->query($query);
        $out = $resultado->row();
        
        return $out;
    }
    
    public function datos_sucursal($d_dh_id) {
        $query = "select s_nombre from sucursal s join dh d on(s.s_sucursal_id=d.s_sucursal_id) where d.d_dh_id=$d_dh_id";
        $resultado = $this->db->query($query);
        $out = $resultado->row();
        return $out;
    }
    /**
     * Funcion que te regresa las preguntas con su valor respectivo
     * @param integer $id_categoria Numero del la categoria_dh de la bd
     * @return resultado del query (pregunta, valor_pregunta)
     */
    
    public function get_preguntas($id_categoria){
        $query = "select ae_atributo as pregunta,ap_pp as valor_pregunta from atributo_evaluado ae,atributo_pp pp where (ae.ae_atributo_evaluado_id = pp.ae_atributo_evaluado_id) and ae.cd_categoria_dh_id=$id_categoria";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }
    /**
     * Funcion que devuelve la tabla completa de categoria_dh
     * @return objetos de la tabla categoria_dh
     */
    public function get_categorias_dh(){
        $query = "select cd_categoria_dh_id as no_categoria, cd_grupo as grupo, ch_nombre as nombre from categoria_dh";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }
    
    public function get_id_nombre_categorias_dh(){
        $query = "select cd_categoria_dh_id as no_categoria, ch_nombre as nombre from categoria_dh";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }
    /**
     * Funcion que retorna un objeto el nombre segun el no_categoria
     * @param entero $no_categoria 
     */
    public function get_nombre_grupo_categoria_dh($no_categoria){
        $query = "SELECT ch_nombre as nombre, cd_grupo as grupo FROM categoria_dh c WHERE c.cd_categoria_dh_id=$no_categoria";
        $resultado = $this->db->query($query);
        return $resultado->row();
    }
    /**
     * Funcion que devuelve el numero del ultimo elemento del catalogo
     * @return Entero
     */
    public function get_ultimo_no_categoria_dh(){
        $query = "SELECT cd_categoria_dh_id as no_categoria FROM categoria_dh ORDER BY no_categoria DESC LIMIT 1";
        $resultado = $this->db->query($query);
        return $resultado->row();
    }
    /**
     * Funcion que solo regresa el nombre del numero de la categoria
     * @param Entero $no_categoria
     * @return Objeto
     */
    public function get_nombre_categoria_dh($no_categoria){
        $query = "SELECT ch_nombre as nombre FROM categoria_dh c WHERE c.cd_categoria_dh_id=$no_categoria";
        $resultado = $this->db->query($query);
        return $resultado->row();
    }
    /**
     * Funcion que inserta en la base de datos las calificaciones y observaciones
     * @param type $dc_po
     */
    public function guardar_po_na_dh_calificacion($dc_po,$ae_atributo_evaluado_id,$dh_id,$no_aplica){
        $query = "INSERT INTO dh_calificacion (dc_po,ae_atributo_evaluado_id,dh_id,no_aplica) values (?,?,?,?)";
        $this->db->query($query, array($dc_po, $ae_atributo_evaluado_id,$dh_id,$no_aplica));
    }
    /**
     * Funcion que se encarga de guardar el campo 
     * @param entero $cd_categoria_dh_id
     * @param entero $dh_id
     * @param Cadena $observaciones Observacion por cada categoria
     */
    public function guardar_datos_constante_control_dh($cd_categoria_dh_id,$dh_id,$observaciones){
        $query = "INSERT INTO constante_control_dh (cd_categoria_dh_id,dh_id,observaciones) values (?,?,?)";
        $this->db->query($query, array($cd_categoria_dh_id, $dh_id,$observaciones));
    }
    /**
     * Funcion que se encarga de retornar el id de las preguntas que correspondan
     * al no de categoria
     * @param Entero $no_categoria
     * @return Objeto de id's
     */
    public function get_id_atributo_evaluado($no_categoria){
        $query = "select ae_atributo_evaluado_id as ae_id from atributo_evaluado  ae where ae.cd_categoria_dh_id=$no_categoria";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;        
    }
    /**
     * Funcion que inserta en la BD el valor de cada una de las preguntas de los 
     * dispositivos
     * @param int $dcd_po: valor de la pregunta
     * @param bigint $ae_atributo_evaluado_id: id de la pregunta
     * @param int  $dh_id: id del cuestionario
     * @param tinyint  $d_dispositivo_id: id del refrigerador o congelador
     */
    public function guardar_po_dh_calificacion_dispositivo($dcd_po,$ae_atributo_evaluado_id,$dh_id,$d_dispositivo_id,$no_dispositivo,$nombre,$dcd_no_aplica){
        $query = "INSERT INTO dh_calificacion_dispositivo (dcd_po,ae_atributo_evaluado_id,dh_id,d_dispositivo_id,no_dispositivo,nombre,dcd_no_aplica) values (?,?,?,?,?,?,?)";
        $this->db->query($query,array($dcd_po,$ae_atributo_evaluado_id,$dh_id,$d_dispositivo_id,$no_dispositivo,$nombre,$dcd_no_aplica));          
    }
    /**
     * Funcion que obtine la suma de todos los puntos posibles, por cada una de las
     * preguntas de la categoria
     * @param int $no_categoria numero de cierta categoria
     * @return Object Que contiene el valor entero de la suma total
     */
    public function get_ppt($no_categoria){
        $query = "SELECT sum(ap_pp) ppt FROM atributo_pp ap, atributo_evaluado ae where ap.ae_atributo_evaluado_id = ae.ae_atributo_evaluado_id and ae.cd_categoria_dh_id = $no_categoria";
        $resultado = $this->db->query($query);
        return $resultado->row();        
    }
    /**
     * Funcion que calcula el valor Menos N/A del formulario checklist
     * @param int $no_categoria
     * @param int $d_dh_id
     * @return objeto con entero
     */
    public function get_mna($no_categoria,$d_dh_id){
        $query = "select sum(ap_pp) mna from "
                . "dh_calificacion dc, "
                . "atributo_evaluado ae,atributo_pp ap "
                . "where ap.ae_atributo_evaluado_id = ae.ae_atributo_evaluado_id "
                . "and ae.ae_atributo_evaluado_id = dc.ae_atributo_evaluado_id "
                . "and dc.no_aplica = 1 "
                . "and ae.cd_categoria_dh_id = $no_categoria "
                . "and dh_id = $d_dh_id";
        $resultado = $this->db->query($query);
        return $resultado->row();
    }
   /**
    * Funcion que suma todos los puntos obtenidos por categoria
    * @param int $no_categoria
    * @param int $d_dh_id
    * @return objeto con atributo po 
    */
    public function get_po($no_categoria,$d_dh_id){
        $query = "select sum(dc_po) po from "
                . "dh_calificacion dc, "
                . "atributo_evaluado ae,atributo_pp ap "
                . "where ap.ae_atributo_evaluado_id = ae.ae_atributo_evaluado_id "
                . "and ae.ae_atributo_evaluado_id = dc.ae_atributo_evaluado_id "
                . "and dc.no_aplica = 0 "
                . "and ae.cd_categoria_dh_id = $no_categoria "
                . "and dh_id = $d_dh_id";
        $resultado = $this->db->query($query);
        return $resultado->row();
    }
    /**
     * Funcion que devuelve la cantidad de dispositivos valuados en un solo cuestionario    
     * @param int $d_dh_id
     * @param int $tipo_dipositivo 1-> Refrigerador 2-> Congelador
     * @return objeto con atributo max_dispositivos 
     */
    public function get_max_dispositivos($d_dh_id,$tipo_dipositivo){
        $query = "select max(no_dispositivo) max_dispositivos from dh_calificacion_dispositivo dcd where dcd.dh_id = $d_dh_id and d_dispositivo_id = $tipo_dipositivo";
        $resultado = $this->db->query($query);
        return $resultado->row();
    }
    /**
     * Funcion que devuelve los puntos obtenidos de los dispositivo evaluados
     * en el cuestionario
     * @param int $d_dh_id
     * @param int $tipo_dipositivo 1->refrigeradores 2->congeladores
     * @return int objeto con atributo po
     */
    public function get_po_dispositivo($d_dh_id,$tipo_dipositivo){
        $query = "select sum(dcd_po) po from dh_calificacion_dispositivo dcd  where dcd.dh_id = $d_dh_id and dcd.d_dispositivo_id = $tipo_dipositivo and dcd.dcd_no_aplica = 0";
        $resultado = $this->db->query($query);
        return $resultado->row();              
    }
    /**
     * Funcion que devuelve el total de los puntos mna
     * @param type $d_dh_id
     * @param type $tipo_dispositivo
     */
    public function get_mna_dispositivos($d_dh_id,$tipo_dispositivo){
        $query = "select sum(ap_pp) mna from dh_calificacion_dispositivo dcd,atributo_pp ap where dcd.dh_id = $d_dh_id and dcd.ae_atributo_evaluado_id = ap.ae_atributo_evaluado_id and dcd.dcd_no_aplica = 1 and dcd.d_dispositivo_id = $tipo_dispositivo ";
        $resultado = $this->db->query($query);
        return $resultado->row();
    }
    
    public function get_cantidad_preguntas($no_categoria){
        $query = "select count(ae_matricula) cantidad_preguntas from atributo_evaluado ae where ae.cd_categoria_dh_id = $no_categoria";
        $resultado = $this->db->query($query);
        return $resultado->row();
    }
    public function get_matricula_pregunta_valorPP_valorPO($no_categoria,$d_dh_id){
        $query = "select ae_matricula matricula,ae_atributo pregunta,ap_pp pp,dc_po po,no_aplica na from dh_calificacion dc,atributo_pp app, atributo_evaluado ae where ae.ae_atributo_evaluado_id = app.ae_atributo_evaluado_id and dc.ae_atributo_evaluado_id = app.ae_atributo_evaluado_id and dc.dh_id = $d_dh_id and ae.cd_categoria_dh_id = $no_categoria";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;        
    }
    
    public function get_observaciones($no_categoria,$d_dh_id){
        $query = "select observaciones from constante_control_dh ccd where ccd.cd_categoria_dh_id = $no_categoria and ccd.dh_id = $d_dh_id";
        $resultado = $this->db->query($query);
        return $resultado->row();
    }
    
    public function get_nombre_no_dispositivo_dipositivos($no_dispositivo,$d_dh_id){
        $query = "select nombre,no_dispositivo from dh_calificacion_dispositivo  dcd where  dcd.dh_id=$d_dh_id and dcd.d_dispositivo_id=$no_dispositivo group by dcd.no_dispositivo";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out; 
                
    }
    public function get_valores_dispositivo($d_dh_id,$dispositivo_id,$no_dispositivo){
        $query = "select dcd_po po , dcd_no_aplica na from dh_calificacion_dispositivo  dcd where  dcd.dh_id=$d_dh_id and dcd.d_dispositivo_id=$dispositivo_id and dcd.no_dispositivo=$no_dispositivo";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }
    
    public function get_pot_dispositivo($d_dh_id,$dispositivo_id,$no_dispositivo){
        $query = "select sum(dcd_po) pot from dh_calificacion_dispositivo  dcd where  dcd.dh_id=$d_dh_id and dcd.d_dispositivo_id=$dispositivo_id and dcd.no_dispositivo=$no_dispositivo and dcd.dcd_no_aplica = 0";
        $resultado = $this->db->query($query);
        return $resultado->row();
    }
    
    public function get_matricula_pregunta_pp($no_categoria){
        $query = "select ae_matricula matricula, ae_atributo pregunta, ap_pp pp from atributo_evaluado ae,atributo_pp app where ae.ae_atributo_evaluado_id = app.ae_atributo_evaluado_id and ae.cd_categoria_dh_id = $no_categoria";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }
    
    public function get_lista_grupos(){
        $query = "select cd_categoria_dh_id id, cd_grupo grupo from categoria_dh";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }
    /**
     * Suma obtenida tanto de los refrigeradores como de los congeladores
     * @param type $d_dh_id
     * @return type
     */
    public function get_sum_pot_disp($d_dh_id){
        $query = "select sum(dcd_po) pot from dh_calificacion_dispositivo dcd where dcd.dh_id = $d_dh_id and dcd.dcd_no_aplica = 0";
        $resultado = $this->db->query($query);
        return $resultado->row();        
    }
    
    public function get_pot_preguntas($d_dh_id){
        $query = "select sum(dc_po) pot from dh_calificacion dc where dc.dh_id = $d_dh_id and dc.no_aplica = 0";
        $resultado = $this->db->query($query);
        return $resultado->row(); 
    }
    
    public function get_ppt_preguntas($d_dh_id){
        $query = "select sum(ap_pp) ppt from atributo_pp ap,dh_calificacion dc where ap.ae_atributo_evaluado_id=dc.ae_atributo_evaluado_id and dc.dh_id = $d_dh_id and dc.no_aplica = 0";
        $resultado = $this->db->query($query);
        return $resultado->row();         
    }
    
    public function get_ppt_disp($d_dh_id){
        $query = "select sum(ap_pp) ppt from atributo_pp ap,dh_calificacion_dispositivo dcd where ap.ae_atributo_evaluado_id=dcd.ae_atributo_evaluado_id and dcd.dh_id = $d_dh_id and dcd.dcd_no_aplica=0";
        $resultado = $this->db->query($query);
        return $resultado->row(); 
        
    }
    public function lista_cuestionarios_dh(){
        $query = "select d_dh_id id,d_fecha fecha,d_jefe_cocina jefe,d_gerente gerente,s_nombre n_sucursal from dh d,sucursal s where d.s_sucursal_id=s.s_sucursal_id;";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }
}

